﻿// 开发者:micropu
// 公司:佛山远钧智慧科技有限公司
using Newtonsoft.Json;
using System.Collections.Concurrent;
using  TouchSocket.Core;
using TouchSocket.Http;
using TouchSocket.Http.WebSockets;
using TouchSocket.Sockets;

namespace Admin.NET.Application;

/// <summary>
/// WebSocket服务
/// </summary>
public class ClientSocketService
{
    // WebSocket是基于Http协议的升级协议，所以应当挂载在http服务器执行
    private HttpService _server;

    public ClientSocketService(int port) 
    {
        _server = new HttpService();
        _server.Setup(new TouchSocketConfig()  //加载配置
        .SetListenIPHosts(port)
        .ConfigureContainer(a =>
        {
            a.AddConsoleLogger();
        })
        .ConfigurePlugins(a =>
        {
            //以下即是插件
            a.UseWebSocket()  //添加WebSocket功能
            .SetWSUrl("/ws")  //设置url直接可以连接
            .UseAutoPong();   //当收到ping报文时自动回应pong      
            a.UseCheckClear().SetCheckClearType(CheckClearType.All).SetTick(TimeSpan.FromSeconds(20)).SetOnClose((c, t) =>
            {
                c.TryShutdown();
                c.SafeClose("超时无数据");
            });             //添加检查Origin插件
            a.Add<ClientDisconnectedPlugin>(); //添加断开连接插件
            a.Add<ClientReceivePlugin>();   //插件接收消息
            //default插件应该最后添加，其作用是
            //1、为找不到的路由返回404
            //2、处理header为Option的探视跨域请求。
            a.UseDefaultHttpServicePlugin();
            })
        );
        _server.Start();
    }
}




